home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / yerk / mps231ss.hqx / Mops source / Asm Source / BuildRegMask < prev    next >
Text File  |  1992-09-13  |  1KB  |  62 lines

  1. \ BuildRegMask                  ReeseWarner                         5/13
  2. \  for MOVEM
  3. \  03/06/86  GDC  fixed MOVEM
  4. \  Aug86 mrh RevMask added for fix to MOVEM
  5.  
  6. 0 -> dlevel
  7.  
  8. operand    EXPTR
  9. objPtr    OPND    class_is operand    \ Will point to either OP1 or OP2
  10.  
  11.  
  12. : REGBIT  { mode reg# -- n }
  13.     1
  14.     reg#  mode AnMode =
  15.     IF    8 +
  16.     ELSE    mode FPctlRegMode = IF  10 +  THEN
  17.     THEN
  18.     <<  ;
  19.  
  20.  
  21. : BuildRegMask  { opndPtr FP? \ tokentype work -- regMask }
  22.     opndPtr -> opnd  0 -> work
  23.     BEGIN
  24.         nextToken -> tokentype
  25.         1st: token  dup  & ;  =
  26.         IF  ( comment )
  27.             drop  #tib @ -> pos  true
  28.         ELSE
  29.             & ,  =   tokentype eol =   or
  30.         THEN
  31.     ( end of field? )
  32.     NWHILE
  33.         msg" in WHILE "
  34.         1st: token  & /  =
  35.         IF
  36.             msg" IT'S A / "
  37.             mode: opnd  reg: opnd  regBit  or> work
  38.             opnd getOp
  39.         ELSE
  40.             msg" IT'S A something else "
  41.             exPtr getOp
  42.             mode: opnd  mode: exPtr  =
  43.             NIF    210 asmError
  44.             ELSE
  45.                 reg: exPtr 1+  reg: opnd
  46.                 DO
  47.                     mode: opnd  i regBit  or> work
  48.                 LOOP
  49.             THEN
  50.         THEN
  51.     REPEAT
  52.     mode: opnd  reg: opnd  regBit  or> work
  53.     work  ;
  54.  
  55.  
  56. : REVMASK  { mask -- mask' }  \ Reverses the mask bits for predecrement mode.
  57.     0
  58.     16 FOR
  59.         2*  mask 1 and or
  60.         mask 2/  -> mask
  61.     NEXT  ;
  62.